iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 12
0
DevOps

從.Net工程師的角度來看DevOps - 到底能夠幫助什麼 之 再戰江湖系列 第 12

[iThome第8屆鐵人賽 18]OpenCover 結果 - html結果產生篇

  • 分享至 

  • xImage
  •  

在上篇瞭解到了測試涵蓋率的計算方式之後,已經可以瞭解xml報告的一些數字所代表的意思。

但是,xml畢竟不是那麼容易讀得懂,並且也不容易看出到底那些地方沒有測試到。

在這篇,將會介紹如何把xml結果產生出html結果,並且如何使用。

sample 程式在 github devops-psake sample/chapter18

同步發表於我的部落格:http://blog.alantsai.net/2017/01/devopsSeries-opencover-generateHtmlResult.html (部落格的格式會漂亮一些)

ReportGenerator - html結果產生工具

ReportGerator
能夠把多種coverage工具的xml結果產生html格式,其中就有包括open cover的格式
Nuget - https://www.nuget.org/packages/ReportGenerator/
Nuget 安裝指令 - Install-Package ReportGenerator
Github - https://github.com/danielpalme/ReportGenerator

build script調整

基本上有以下幾個地方要調整:

  1. 把ReportGenerator安裝到build專案
  2. 在測試執行完的時候產生結果

安裝ReportGenerator

透過nuget先安裝ReportGenerator,再來在default.ps1裡面,建立一個property是代表reportGenerator的工具:

Properties{
....
$reportGeneratorExe = (Get-PackagePath $packageDirectoryPath "ReportGenerator") +
   "\tools\ReportGenerator.exe"
....
}  

在測試執行完成產生html結果

再來,有一個Test的task,這個task其實是在3個測試framework執行完才會執行。

因此可以在這邊多一個判斷,如果有產生出Coverage的xml的時候,在執行ReportGenerator。

這個Generator執行起來很容易,只需要傳入兩個參數:

  1. openCover xml結果的路徑
  2. 產生的html要放的路徑

因此整個task變成:

task Test -depends Compile, Clean, XunitTest, NunitTest, MSTest -description "執行Test" { 
  
 if(Test-Path $openCoverResult){
  Write-Host "`r`n產生測試涵蓋率報告 html 格式"
  exec{ &$reportGeneratorExe $openCoverResult $buildTestCoverageDirectory}
 } else {
  Write-Host "`r`n沒有產生測試涵蓋率報告"
 }
 
 Write-Host $testMsg
}

html結果介紹

當在執行build的時候,會在.\testCoverage裡面多出很多檔案,其中最重要的檔案就是Index.htm

如果把Index.htm執行起來,可以看到結果的總覽。

結果總覽

在index.htm的上半部,是整個結果的總覽。其中有個部分要注意的是,裡面用了Line Coverage這個詞,但是其實這邊指的是Sequence Point Coverage(在報告其他地方也是同理)

可以看到整個測試涵蓋率

Assembly執行結果

在Index.htm的下面則是Assembly執行的總覽,可以簡單看到那些涵蓋率是多少。

這邊有幾個可以使用的地方:

  1. Grouping - 可以切換如何group結果,只要用左右拖拉即可
  2. 排序 - 每一個表頭的三角形可以點做排序
  3. Filter - 可以過濾要看哪一個

Assembly總覽

Assembly詳細

如果選一個assembly,可以點進去看到底那邊有cover到,那邊沒有。

下面的例子是我們唯一有寫測試的地方,這個報告還會highlight出,那邊是測試點。如果沒涵蓋,會用紅色標註

Assembly詳細

其他呈現方式

ReportGenerator產生的html其實非常詳細,用來看結果其實非常容易發現沒測試到的地方。

不過或許會好奇還有沒有其他使用OpenCover的xml結果的方式,其實還有兩個地方:

  • Coveralls - 如果有希望在網路上給大家看到測試涵蓋率,可以使用Coveralls這個網站服務 - 可以把這個整合到build script裡面,自動把結果發佈到上面
  • OpenCover UI - VS 套件 - 這個是開發的時候可以使用的,能夠在VS工具裡面直接看到那段程式碼有沒有涵蓋,類似於VS 高版本裡面的Coverage工具呈現的樣子。

結語

透過這篇,對於測試涵蓋率和測試碼品質如何保證有個概念。

接下來會來看看另外一個角度來保證程式碼品質,也就是透過程式碼分析的方式來達到。


上一篇
[iThome第8屆鐵人賽 17]OpenCover 結果 - 涵蓋率介紹篇
下一篇
[iThome第8屆鐵人賽 19]靜態程式碼分析之Assembly品質分析 - Code Analysis(以前的FxCop)
系列文
從.Net工程師的角度來看DevOps - 到底能夠幫助什麼 之 再戰江湖30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言